constraint layout: Measure more correctly
authorMatthias Clasen <mclasen@redhat.com>
Fri, 28 Jun 2019 20:55:13 +0000 (20:55 +0000)
committerEmmanuele Bassi <ebassi@gnome.org>
Sun, 30 Jun 2019 23:10:11 +0000 (00:10 +0100)
Set up all constraints for minimum + natural
width + height when measuring, regardless
of the orientation we're measuring. Anything
else will lead to incorrect answers when
there are constraints that cut across
dimensions.

gtk/gtkconstraintlayout.c

index f2b65ff091074a1da547faeff45e22ac1975f91f..378e7840af8f44ebd751957f61639ad494ca98b6 100644 (file)
@@ -720,14 +720,12 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
     {
       GtkConstraintVariable *width_var, *height_var;
       GtkConstraintRef *constraint;
-      int min_size = 0, nat_size = 0;
+      GtkRequisition min_req, nat_req;
 
       if (!gtk_widget_should_layout (child))
         continue;
 
-      gtk_widget_measure (child, orientation, -1,
-                          &min_size, &nat_size,
-                          NULL, NULL);
+      gtk_widget_get_preferred_size (child, &min_req, &nat_req);
 
       width_var = get_child_attribute (self, child, GTK_CONSTRAINT_ATTRIBUTE_WIDTH);
 
@@ -735,15 +733,15 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
         gtk_constraint_solver_add_constraint (solver,
                                               width_var,
                                               GTK_CONSTRAINT_RELATION_GE,
-                                              gtk_constraint_expression_new (min_size),
+                                              gtk_constraint_expression_new (min_req.width),
                                               GTK_CONSTRAINT_WEIGHT_REQUIRED);
       g_ptr_array_add (size_constraints, constraint);
 
       constraint =
-        gtk_constraint_solver_add_constraint (solver,
+gtk_constraint_solver_add_constraint (solver,
                                               width_var,
                                               GTK_CONSTRAINT_RELATION_EQ,
-                                              gtk_constraint_expression_new (nat_size),
+                                              gtk_constraint_expression_new (nat_req.width),
                                               GTK_CONSTRAINT_WEIGHT_MEDIUM);
       g_ptr_array_add (size_constraints, constraint);
 
@@ -753,7 +751,7 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
         gtk_constraint_solver_add_constraint (solver,
                                               height_var,
                                               GTK_CONSTRAINT_RELATION_GE,
-                                              gtk_constraint_expression_new (min_size),
+                                              gtk_constraint_expression_new (min_req.height),
                                               GTK_CONSTRAINT_WEIGHT_REQUIRED);
       g_ptr_array_add (size_constraints, constraint);
 
@@ -761,7 +759,7 @@ gtk_constraint_layout_measure (GtkLayoutManager *manager,
         gtk_constraint_solver_add_constraint (solver,
                                               height_var,
                                               GTK_CONSTRAINT_RELATION_EQ,
-                                              gtk_constraint_expression_new (nat_size),
+                                              gtk_constraint_expression_new (nat_req.height),
                                               GTK_CONSTRAINT_WEIGHT_MEDIUM);
       g_ptr_array_add (size_constraints, constraint);
     }